const download = require('download'); // 下载图片库
const path = require('path');
const fs = require('fs');
const deleteDir = require('@/utils/deleteFile');
const headers = {
  'User-Agent':
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
};
// console.log(process.cwd()); // 执行命令的目录
const acticleStoreAddress = process.env.ArticleData; // 文章爬取资源目录

/**
 * 获取存放目录, 每天爬取的图片放到一个目录中，没有目录则创建
 * @param {*} isOpenMaxDir 是否开启限定目下最多文件数量
 * @param {*} maxDir  最多存放10个目录
 * @returns
 */
function getDirectory(isOpenMaxDir = false, maxDir = 10) {
  const rootPathDir = path.resolve(process.cwd(), `./${acticleStoreAddress}`); // 存放爬取数据根目录
  if (!fs.existsSync(rootPathDir)) {
    fs.mkdirSync(rootPathDir); // 创建根目录
  }
  const date = new Date();
  const year = date.getFullYear().toString();
  const month = (date.getMonth() + 1).toString().padStart(2, '0');
  const day = date.getDate().toString().padStart(2, '0');
  const yearPathDir = path.join(rootPathDir, year);
  if (!fs.existsSync(yearPathDir)) {
    fs.mkdirSync(yearPathDir); // 创建年目录
  }
  const dayPathDir = path.join(yearPathDir, `${month}${day}`);
  if (!fs.existsSync(dayPathDir)) {
    fs.mkdirSync(dayPathDir); // 创建日目录
  }
  if (isOpenMaxDir) {
    const files = fs.readdirSync(yearPathDir); // 年目录下所有文件以及目录
    if (files.length > maxDir) {
      let delDir = ''; // 删除目录
      for (const file of files) {
        const filepath = path.join(dayPathDir, file); // 文件路径
        const stat = fs.statSync(filepath); // 文件信息
        if (!delDir) {
          delDir = filepath;
        } else {
          let deleteStat = fs.statSync(delDir);
          // 比较最久没有修改的目录
          if (stat.mtimeMs < deleteStat.mtimeMs) {
            delDir = filepath; // mtimeMs 修改日期
          }
        }
      }
      deleteDir(delDir, true); // 删除目录下以及自己
    }
  }
  return { rootPathDir, yearPathDir, dayPathDir, year, month, day };
}

/**
 * 下载图片到本地
 * @param {*} imgurl 图片地址
 * @param {*} headerOptions  下载图片的请求头
 * @returns
 */
module.exports = async (imgurl, headerOptions = headers) => {
  if (!imgurl) return Promise.reject('地址不能为空');
  const { dayPathDir, year, month, day } = getDirectory();

  console.log(imgurl, 222);

  try {
    // let extname = path.extname(imgurl);
    // 此处图片所有转位 jpg (因为有的图片是没有后缀名，有的好多其他参数)
    const filename = Math.random().toString(16).slice(2, 7) + Date.now() + '.jpg';
    await download(imgurl, dayPathDir, { filename, headerOptions }); // 下载图片
    // 此处可以在用户段播报
    console.log('正在下载图片:', imgurl);
    // 注意这里等待结果是图片的 buffer
    return Promise.resolve(
      `${process.env.RootArticleImage}/${acticleStoreAddress}/${year}/${month}${day}/${filename}`
    );
  } catch (err) {
    return Promise.reject('图片下载失败' + err);
  }
};
